package com.dalianpai.gulimall.product;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * Spirng-Cache的不足
 * 1）读模式：
 *    缓存穿透：查询一个null数据。解决：缓存空数据：cache-null-values=true
 *    缓存击穿：大量并发进来同时查询一个正好过期的数据。解决：加锁，默认无锁，sync=true
 *    缓存雪崩：大量的key同时过期。解决：加随机时间。加上过期时间 spring.cache.redis.time-to-live=3600000
 *  2）写模式：（缓存与数据库一致）
 *    1：写入加锁
 *    2：引入canal，感受到mysql的变化
 *    3：读多写多，直接去数据库查询就行
 *  总结：
 *    常规数据（读多写少，即时性，一致性要求不高的数据，完全可以使用spring-cache）
 *    特殊数据：特殊设计
 */

//@MapperScan("com.dalianpai.gulimall.product.dao")
//@ComponentScan("com.dalianpai")
@EnableRedisHttpSession
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients("com.dalianpai.gulimall.product.feign")
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}
